from rest_framework import serializers
from django_redis import get_redis_connection


class SmscodesViewSerializers(serializers.Serializer):
    text = serializers.CharField(label='图片验证码', max_length=4, min_length=4)
    image_code_id = serializers.UUIDField(label='图片id')

    def validate(self, attrs):
        # 获取用户输入的图片验证码
        text = attrs.get('text')
        # 获取redis连接
        redis_conn = get_redis_connection('code')
        # 根据img_code_id 获取用户输入的图片验证
        redis_text = redis_conn.get('img_%s' % attrs['image_code_id'])
        # 判断验证码是否过期
        if not redis_text:
            raise serializers.ValidationError('验证码已过期')
        # 如果没有过期删除
        redis_conn.delete('img_%s' % attrs['image_code_id'])
        # 判断用户输入的和保存的验证码信息是否一直
        if text.lower() != redis_text.decode().lower():
            raise serializers.ValidationError('验证码错误')
        return attrs
